﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using HCFramework.API.LINQ;

namespace C
{
    public class ProductPropertyController
    {
        public static void Insert(ProductProperty a)
        {
            // Chỉ cho phép thực hiện nếu Category là node lá
            if (!C.ProductCategoryController.IsLeafNode(a.CategoryID)) throw new Exception("Category không phải là node lá");
            // Không insert nếu trùng tên
            if (GetByName(a.Name, a.CategoryID) != null) return;

            HCDataContext db = new HCDataContext();
            db.ProductProperties.InsertOnSubmit(a);
            db.SubmitChanges();
        }

        public static void Update(ProductProperty a, HCDataContext db)
        {
            // Chỉ cho phép thực hiện nếu Category là node lá
            if (!C.ProductCategoryController.IsLeafNode(a.CategoryID)) throw new Exception("Category không phải là node lá");

            db.SubmitChanges();
        }

        public static void Delete(int id)
        {
            HCDataContext db = new HCDataContext();
            ProductProperty a = db.ProductProperties.Where(
                ik => ik.ProductPropertyID == id).First();

            if (a.PropertyFilters.Count > 0) throw new Exception("Không thể xóa, vẫn còn PropertyFilters");
            if (a.ProductPropertyValues.Count > 0) throw new Exception("Không thể xóa, vẫn còn ProductPropertyValues");

            db.ProductProperties.DeleteOnSubmit(a);
            db.SubmitChanges();
        }

        public static ProductProperty GetByID(int id, HCDataContext db)
        {
            return db.ProductProperties.Where(
                ik => ik.ProductPropertyID == id).FirstOrDefault();
        }

        public static ProductProperty GetByID(int id)
        {
            return GetByID(id, new HCDataContext());
        }

        public static ProductProperty GetByName(string name, int categoryID)
        {
            return new HCDataContext().ProductProperties.Where(ik => ik.CategoryID == categoryID
                && ik.Name == name).FirstOrDefault();
        }
    }
}